﻿2026-06-07T22:53:32.3203503Z ##[group]Run ./traceable-reqs lint || true
2026-06-07T22:53:32.3203652Z [36;1m./traceable-reqs lint || true[0m
2026-06-07T22:53:32.3215858Z shell: /usr/bin/bash -e {0}
2026-06-07T22:53:32.3215953Z ##[endgroup]
2026-06-07T22:53:32.3379759Z Requirement quality findings (55); 166 requirements queued for agent review:
2026-06-07T22:53:32.3380435Z   [must] requirement_quality REQ-API-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3380989Z   [must] requirement_quality REQ-CLI-1 criterion=length — title is 47 words; want 3..=25
2026-06-07T22:53:32.3381506Z   [must] requirement_quality REQ-CLI-2 criterion=length — title is 37 words; want 3..=25
2026-06-07T22:53:32.3382020Z   [must] requirement_quality REQ-CLI-3 criterion=length — title is 37 words; want 3..=25
2026-06-07T22:53:32.3382526Z   [must] requirement_quality REQ-CONSENT-1 criterion=length — title is 41 words; want 3..=25
2026-06-07T22:53:32.3383054Z   [must] requirement_quality REQ-CONSENT-2 criterion=length — title is 37 words; want 3..=25
2026-06-07T22:53:32.3383912Z   [must] requirement_quality REQ-CONV-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3384386Z   [must] requirement_quality REQ-CONV-1 criterion=length — title is 73 words; want 3..=25
2026-06-07T22:53:32.3384710Z   [must] requirement_quality REQ-CONV-2 criterion=length — title is 47 words; want 3..=25
2026-06-07T22:53:32.3385187Z   [must] requirement_quality REQ-DAEMON-5 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3385516Z   [must] requirement_quality REQ-DAEMON-5 criterion=length — title is 64 words; want 3..=25
2026-06-07T22:53:32.3385950Z   [must] requirement_quality REQ-HAZARD-CONFLICT-BOTH-PRESERVED criterion=length — title is 29 words; want 3..=25
2026-06-07T22:53:32.3386376Z   [must] requirement_quality REQ-HAZARD-DAEMON-SCHED-NONBLOCKING criterion=length — title is 32 words; want 3..=25
2026-06-07T22:53:32.3386798Z   [must] requirement_quality REQ-HAZARD-DETACHED-PIPE-INHERIT criterion=length — title is 52 words; want 3..=25
2026-06-07T22:53:32.3387451Z   [must] requirement_quality REQ-HAZARD-ELEVATED-DAEMON-SPAWN criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3387870Z   [must] requirement_quality REQ-HAZARD-ELEVATED-DAEMON-SPAWN criterion=length — title is 58 words; want 3..=25
2026-06-07T22:53:32.3388400Z   [must] requirement_quality REQ-HAZARD-ENVELOPE-PARSER-SAFE criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3388762Z   [must] requirement_quality REQ-HAZARD-EPOCH-RESET criterion=length — title is 60 words; want 3..=25
2026-06-07T22:53:32.3389269Z   [must] requirement_quality REQ-HAZARD-GEN-START-NOW criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3389661Z   [must] requirement_quality REQ-HAZARD-INSTANT-UNDERFLOW criterion=length — title is 30 words; want 3..=25
2026-06-07T22:53:32.3390056Z   [must] requirement_quality REQ-HAZARD-PAIR-RATE-LIMIT criterion=length — title is 37 words; want 3..=25
2026-06-07T22:53:32.3390456Z   [must] requirement_quality REQ-HAZARD-PAIR-SEED-ROTATION criterion=length — title is 33 words; want 3..=25
2026-06-07T22:53:32.3391206Z   [must] requirement_quality REQ-HAZARD-PAIR-TRANSCRIPT-BIND criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3391649Z   [must] requirement_quality REQ-HAZARD-PSYCHE-OUTBOUND-PROXY criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3391991Z   [must] requirement_quality REQ-HAZARD-PSYCHE-OUTBOUND-PROXY criterion=length — title is 27 words; want 3..=25
2026-06-07T22:53:32.3392413Z   [must] requirement_quality REQ-HAZARD-REGISTRY-GHOST-ROWS criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3392747Z   [must] requirement_quality REQ-HAZARD-REGISTRY-GHOST-ROWS criterion=length — title is 66 words; want 3..=25
2026-06-07T22:53:32.3393247Z   [must] requirement_quality REQ-HAZARD-SUDO-SECURE-PATH criterion=length — title is 43 words; want 3..=25
2026-06-07T22:53:32.3393576Z   [must] requirement_quality REQ-HAZARD-WAN-ORIGIN-AUTH criterion=length — title is 37 words; want 3..=25
2026-06-07T22:53:32.3393838Z   [must] requirement_quality REQ-INST-15 criterion=length — title is 32 words; want 3..=25
2026-06-07T22:53:32.3394115Z   [must] requirement_quality REQ-INSTALL-2 criterion=length — title is 2 word(s); want 3..=25
2026-06-07T22:53:32.3394505Z   [must] requirement_quality REQ-INSTALL-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3394780Z   [must] requirement_quality REQ-INSTALL-6 criterion=length — title is 56 words; want 3..=25
2026-06-07T22:53:32.3395151Z   [must] requirement_quality REQ-INSTALL-7 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3395438Z   [must] requirement_quality REQ-INSTALL-7 criterion=length — title is 50 words; want 3..=25
2026-06-07T22:53:32.3395695Z   [must] requirement_quality REQ-INSTALL-8 criterion=length — title is 55 words; want 3..=25
2026-06-07T22:53:32.3396081Z   [must] requirement_quality REQ-MANIFEST-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3396448Z   [must] requirement_quality REQ-MIGRATE-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3396705Z   [must] requirement_quality REQ-MSG-4 criterion=length — title is 31 words; want 3..=25
2026-06-07T22:53:32.3397387Z   [must] requirement_quality REQ-PAIR-8 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3397791Z   [must] requirement_quality REQ-PAIR-8 criterion=length — title is 67 words; want 3..=25
2026-06-07T22:53:32.3398221Z   [must] requirement_quality REQ-PRES-1 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3398546Z   [must] requirement_quality REQ-PRES-1 criterion=length — title is 48 words; want 3..=25
2026-06-07T22:53:32.3398856Z   [must] requirement_quality REQ-SEAM-SPAWN criterion=length — title is 2 word(s); want 3..=25
2026-06-07T22:53:32.3399162Z   [must] requirement_quality REQ-SHELL-1 criterion=length — title is 36 words; want 3..=25
2026-06-07T22:53:32.3399442Z   [must] requirement_quality REQ-SHELL-2 criterion=length — title is 49 words; want 3..=25
2026-06-07T22:53:32.3399728Z   [must] requirement_quality REQ-STORE-1 criterion=length — title is 34 words; want 3..=25
2026-06-07T22:53:32.3400012Z   [must] requirement_quality REQ-SUBNET-5 criterion=length — title is 52 words; want 3..=25
2026-06-07T22:53:32.3400411Z   [must] requirement_quality REQ-SUBNET-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3400692Z   [must] requirement_quality REQ-SUBNET-6 criterion=length — title is 38 words; want 3..=25
2026-06-07T22:53:32.3401179Z   [must] requirement_quality REQ-SUBNET-7 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3401723Z   [must] requirement_quality REQ-SUBNET-7 criterion=length — title is 75 words; want 3..=25
2026-06-07T22:53:32.3402410Z   [must] requirement_quality REQ-SUBNET-8 criterion=length — title is 53 words; want 3..=25
2026-06-07T22:53:32.3402844Z   [must] requirement_quality REQ-UPD-6 criterion=contains-and — title contains ' and ' — may smuggle multiple capabilities
2026-06-07T22:53:32.3403168Z   [must] requirement_quality REQ-UPD-6 criterion=length — title is 32 words; want 3..=25
2026-06-07T22:53:32.3403206Z 
2026-06-07T22:53:32.3403346Z # Requirement quality review
2026-06-07T22:53:32.3403384Z 
2026-06-07T22:53:32.3403622Z You are reviewing 166 requirement(s) from `traceable-reqs.toml` against a quality
2026-06-07T22:53:32.3403879Z rubric. Deterministic checks (length, contains-and, tbd-todo, duplicate-titles,
2026-06-07T22:53:32.3404280Z trailing-etc) have already run and surfaced as `requirement_quality` findings on
2026-06-07T22:53:32.3404465Z this command's output. Your task is the rubric items below.
2026-06-07T22:53:32.3404518Z 
2026-06-07T22:53:32.3404629Z ## Rubric
2026-06-07T22:53:32.3404662Z 
2026-06-07T22:53:32.3405005Z - **singular** — describes one capability; no smuggled "and"/"or" across distinct actions.
2026-06-07T22:53:32.3405299Z - **verifiable** — states an observable behavior a test or reviewer could confirm.
2026-06-07T22:53:32.3405563Z - **atomic** — cannot be split into two requirements without losing meaning.
2026-06-07T22:53:32.3405768Z - **active-voice** — clear subject and active verb.
2026-06-07T22:53:32.3405806Z 
2026-06-07T22:53:32.3406092Z If a criterion is borderline or doesn't apply, abstain — only emit findings for
2026-06-07T22:53:32.3406208Z clear concerns.
2026-06-07T22:53:32.3406246Z 
2026-06-07T22:53:32.3406537Z ## Requirements
2026-06-07T22:53:32.3406589Z 
2026-06-07T22:53:32.3406702Z ### REQ-ARCH-1
2026-06-07T22:53:32.3406857Z - Title: Many small acyclically-layered crates
2026-06-07T22:53:32.3407070Z - Required stages: impl
2026-06-07T22:53:32.3407094Z 
2026-06-07T22:53:32.3407418Z ### REQ-ARCH-2
2026-06-07T22:53:32.3407661Z - Title: Public SDK surface is spt-proto, spt-runtime, spt-msg
2026-06-07T22:53:32.3407782Z - Required stages: impl
2026-06-07T22:53:32.3407830Z 
2026-06-07T22:53:32.3407942Z ### REQ-ARCH-3
2026-06-07T22:53:32.3408186Z - Title: Wire-protocol version independent of crate semver, N-1 compat window
2026-06-07T22:53:32.3408314Z - Required stages: impl, unit
2026-06-07T22:53:32.3408347Z 
2026-06-07T22:53:32.3408462Z ### REQ-ARCH-4
2026-06-07T22:53:32.3408657Z - Title: Copy-verbatim the commodity layer from the sister project
2026-06-07T22:53:32.3408791Z - Required stages: impl, unit
2026-06-07T22:53:32.3408824Z 
2026-06-07T22:53:32.3408938Z ### REQ-DAEMON-1
2026-06-07T22:53:32.3409134Z - Title: One per-machine spt-daemon owning all per-machine state
2026-06-07T22:53:32.3409286Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3409319Z 
2026-06-07T22:53:32.3409430Z ### REQ-DAEMON-2
2026-06-07T22:53:32.3409601Z - Title: Broker/brain split for seamless self-update
2026-06-07T22:53:32.3409741Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3409773Z 
2026-06-07T22:53:32.3409882Z ### REQ-DAEMON-3
2026-06-07T22:53:32.3410065Z - Title: Any api invocation auto-starts the daemon if absent
2026-06-07T22:53:32.3410187Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3410220Z 
2026-06-07T22:53:32.3410341Z ### REQ-DAEMON-4
2026-06-07T22:53:32.3410487Z - Title: Honor every KNOWN-HAZARDS invariant
2026-06-07T22:53:32.3410611Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3410644Z 
2026-06-07T22:53:32.3410767Z ### REQ-STORE-1
2026-06-07T22:53:32.3411586Z - Title: spt-store::BranchStore (git branch as versioned KV; commit=checkpoint/tip=resume, atomic multi-key, merge-native sync) is the substrate for coarse/durable/audited state (context, registry snapshot+distribution, daemon checkpoint); hot paths (B5 fsync journal) + indexed queries (SQLite spool) excluded (ADR-0011)
2026-06-07T22:53:32.3411682Z - Required stages: impl, unit
2026-06-07T22:53:32.3411906Z 
2026-06-07T22:53:32.3412020Z ### REQ-MANIFEST-1
2026-06-07T22:53:32.3412196Z - Title: Per-adapter manifest with adapter_name and min_spt_core_version
2026-06-07T22:53:32.3412331Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3412363Z 
2026-06-07T22:53:32.3412464Z ### REQ-SEAM-SPAWN
2026-06-07T22:53:32.3412584Z - Title: spawn-session seam
2026-06-07T22:53:32.3412706Z - Required stages: impl, unit
2026-06-07T22:53:32.3412735Z 
2026-06-07T22:53:32.3412835Z ### REQ-SEAM-POSTSPAWN
2026-06-07T22:53:32.3412965Z - Title: post-spawn / api bind seam with boot nonce
2026-06-07T22:53:32.3413073Z - Required stages: impl, unit
2026-06-07T22:53:32.3413101Z 
2026-06-07T22:53:32.3413201Z ### REQ-SEAM-PSYCHE
2026-06-07T22:53:32.3413348Z - Title: spawn-psyche seam (fresh + resume templates)
2026-06-07T22:53:32.3413548Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3413581Z 
2026-06-07T22:53:32.3413681Z ### REQ-SEAM-HISTORY
2026-06-07T22:53:32.3413853Z - Title: History subsystem (fetcher / locate-normalize / native store)
2026-06-07T22:53:32.3413967Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3413996Z 
2026-06-07T22:53:32.3414100Z ### REQ-SEAM-ACTIVITY
2026-06-07T22:53:32.3414268Z - Title: Activity/idle reported via api sentinels, not PTY quiescence
2026-06-07T22:53:32.3414377Z - Required stages: impl, unit
2026-06-07T22:53:32.3414410Z 
2026-06-07T22:53:32.3414502Z ### REQ-SEAM-INJECT
2026-06-07T22:53:32.3414664Z - Title: inject-input methods configurable per activity-state
2026-06-07T22:53:32.3414763Z - Required stages: impl, unit
2026-06-07T22:53:32.3414797Z 
2026-06-07T22:53:32.3414893Z ### REQ-SEAM-RESUME
2026-06-07T22:53:32.3415068Z - Title: resume-session seam (fresh-with-preload / continue-existing)
2026-06-07T22:53:32.3415169Z - Required stages: impl, unit
2026-06-07T22:53:32.3415213Z 
2026-06-07T22:53:32.3415311Z ### REQ-SEAM-CAPABILITY
2026-06-07T22:53:32.3415451Z - Title: Hostable endpoint-types capability declaration
2026-06-07T22:53:32.3415556Z - Required stages: impl, unit
2026-06-07T22:53:32.3415598Z 
2026-06-07T22:53:32.3415697Z ### REQ-SEAM-UPDATE
2026-06-07T22:53:32.3415854Z - Title: Adapter-update avenue (file-pull / delegated command)
2026-06-07T22:53:32.3415957Z - Required stages: impl, unit
2026-06-07T22:53:32.3415990Z 
2026-06-07T22:53:32.3416080Z ### REQ-API-1
2026-06-07T22:53:32.3416244Z - Title: api prefix and adapter_name on every machinery invocation
2026-06-07T22:53:32.3416347Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3416380Z 
2026-06-07T22:53:32.3416473Z ### REQ-API-2
2026-06-07T22:53:32.3416662Z - Title: The api subcommand surface (bind/listen/poll/state/worker/boundary/...)
2026-06-07T22:53:32.3416763Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3416797Z 
2026-06-07T22:53:32.3416892Z ### REQ-API-3
2026-06-07T22:53:32.3417121Z - Title: commune/signoff are file-drops, not commands
2026-06-07T22:53:32.3417249Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3417286Z 
2026-06-07T22:53:32.3417431Z ### REQ-START-1
2026-06-07T22:53:32.3417625Z - Title: Adapters never resolve SPT_HOME; binary on PATH; api bridging only
2026-06-07T22:53:32.3417727Z - Required stages: impl, unit
2026-06-07T22:53:32.3417760Z 
2026-06-07T22:53:32.3417854Z ### REQ-START-2
2026-06-07T22:53:32.3417978Z - Title: Harness-hosted startup: api seed then listen
2026-06-07T22:53:32.3418085Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3418117Z 
2026-06-07T22:53:32.3418206Z ### REQ-START-3
2026-06-07T22:53:32.3418366Z - Title: spt-hosted startup: spawn-session then api bind (no file)
2026-06-07T22:53:32.3418465Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3418502Z 
2026-06-07T22:53:32.3418597Z ### REQ-START-4
2026-06-07T22:53:32.3418731Z - Title: Adapter-injected env aliases (SPT/OWL/LIVE)
2026-06-07T22:53:32.3418831Z - Required stages: impl, unit
2026-06-07T22:53:32.3418869Z 
2026-06-07T22:53:32.3418969Z ### REQ-EP-1
2026-06-07T22:53:32.3419089Z - Title: Day-one endpoint types; open type system
2026-06-07T22:53:32.3419193Z - Required stages: impl, unit
2026-06-07T22:53:32.3419338Z 
2026-06-07T22:53:32.3419433Z ### REQ-EP-2
2026-06-07T22:53:32.3419584Z - Title: Agent endpoints vs Shells distinction in the type model
2026-06-07T22:53:32.3419690Z - Required stages: impl, unit
2026-06-07T22:53:32.3419722Z 
2026-06-07T22:53:32.3419808Z ### REQ-EP-3
2026-06-07T22:53:32.3419986Z - Title: Messaging payloads carry typed operation commands + file blobs
2026-06-07T22:53:32.3420089Z - Required stages: impl, unit
2026-06-07T22:53:32.3420123Z 
2026-06-07T22:53:32.3420209Z ### REQ-EP-4
2026-06-07T22:53:32.3420352Z - Title: PresenceChannel broker endpoint (seam day-one)
2026-06-07T22:53:32.3420447Z - Required stages: impl, unit
2026-06-07T22:53:32.3420481Z 
2026-06-07T22:53:32.3420572Z ### REQ-EP-5
2026-06-07T22:53:32.3421204Z - Title: Concrete shell instantiation model: spawn-mints-instance (vs relink/online), registered-on-node permission + broadcast-is-discovery, per-shell require_approval gate, max_instances_per_owner + over_cap, instance aliasing, discovery scope
2026-06-07T22:53:32.3421417Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3421450Z 
2026-06-07T22:53:32.3421555Z ### REQ-INST-1
2026-06-07T22:53:32.3421722Z - Title: endpoint ID vs instance split (adapter-agnostic ID)
2026-06-07T22:53:32.3421822Z - Required stages: 
2026-06-07T22:53:32.3421855Z 
2026-06-07T22:53:32.3421946Z ### REQ-INST-2
2026-06-07T22:53:32.3422065Z - Title: Per-node files, synced Psyche mind
2026-06-07T22:53:32.3422180Z - Required stages: impl, unit
2026-06-07T22:53:32.3422205Z 
2026-06-07T22:53:32.3422294Z ### REQ-INST-3
2026-06-07T22:53:32.3422441Z - Title: Dormant (warm) / suspended (cold) resting states
2026-06-07T22:53:32.3422566Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3422604Z 
2026-06-07T22:53:32.3422709Z ### REQ-INST-4
2026-06-07T22:53:32.3422867Z - Title: active to dormant/suspended fires a transition echo commune
2026-06-07T22:53:32.3422966Z - Required stages: impl, unit
2026-06-07T22:53:32.3423000Z 
2026-06-07T22:53:32.3423095Z ### REQ-INST-5
2026-06-07T22:53:32.3423262Z - Title: Two-tier context sync (live to all, project to same-project)
2026-06-07T22:53:32.3423357Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3423391Z 
2026-06-07T22:53:32.3423492Z ### REQ-INST-6
2026-06-07T22:53:32.3423661Z - Title: Deferred messages not delivered to dormant/suspended instances
2026-06-07T22:53:32.3423776Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3423810Z 
2026-06-07T22:53:32.3423899Z ### REQ-INST-7
2026-06-07T22:53:32.3424026Z - Title: Subnet registry + bare-id resolution policy
2026-06-07T22:53:32.3424136Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3424166Z 
2026-06-07T22:53:32.3424269Z ### REQ-INST-8
2026-06-07T22:53:32.3424417Z - Title: Remote-control mode distinct from local operation
2026-06-07T22:53:32.3424513Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3424556Z 
2026-06-07T22:53:32.3424650Z ### REQ-INST-9
2026-06-07T22:53:32.3424823Z - Title: Multi-subnet membership (same-user N subnets; cross-user seam)
2026-06-07T22:53:32.3424932Z - Required stages: impl, unit
2026-06-07T22:53:32.3424965Z 
2026-06-07T22:53:32.3425062Z ### REQ-INST-10
2026-06-07T22:53:32.3425257Z - Title: Qualified addressing [subnet:]id[@node] + ambiguity forces qualification
2026-06-07T22:53:32.3425377Z - Required stages: impl, unit
2026-06-07T22:53:32.3425410Z 
2026-06-07T22:53:32.3425505Z ### REQ-INST-11
2026-06-07T22:53:32.3425706Z - Title: spt rename <id> rippled to all instances (collision-checked, 6.5-reconciled)
2026-06-07T22:53:32.3425815Z - Required stages: impl, unit
2026-06-07T22:53:32.3425848Z 
2026-06-07T22:53:32.3425943Z ### REQ-INST-12
2026-06-07T22:53:32.3426219Z - Title: Endpoint visibility per-(endpoint,subnet): excluded semantics, OR-of-defaults + override, gates sync
2026-06-07T22:53:32.3426323Z - Required stages: impl, unit
2026-06-07T22:53:32.3426362Z 
2026-06-07T22:53:32.3426451Z ### REQ-INST-13
2026-06-07T22:53:32.3426621Z - Title: Subnet-exclusive sync + per-endpoint subnet-membership list
2026-06-07T22:53:32.3426723Z - Required stages: impl, unit
2026-06-07T22:53:32.3426836Z 
2026-06-07T22:53:32.3426931Z ### REQ-INST-14
2026-06-07T22:53:32.3427381Z - Title: Resource advertisement (subnet resource registry): free-text blurb, both-authored, registry projection, visibility/whitelist-gated
2026-06-07T22:53:32.3427490Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3427522Z 
2026-06-07T22:53:32.3427624Z ### REQ-INST-15
2026-06-07T22:53:32.3428301Z - Title: Immutable home subnet (assigned at creation: auto-if-one/ask-if-many) + spt fork (cross-subnet clone to a new identity, copy-then-diverge, not re-home); adapter chosen at creation from registered hostable adapters, changed only via launch/resume-under-new (ADR-0010)
2026-06-07T22:53:32.3428409Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3428443Z 
2026-06-07T22:53:32.3428635Z ### REQ-REACH-1
2026-06-07T22:53:32.3428771Z - Title: Off-node remote-drive detection + file transfer
2026-06-07T22:53:32.3428888Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3428921Z 
2026-06-07T22:53:32.3429020Z ### REQ-REACH-2
2026-06-07T22:53:32.3429162Z - Title: Remote command execution (deferred, consent-gated)
2026-06-07T22:53:32.3429258Z - Required stages: 
2026-06-07T22:53:32.3429291Z 
2026-06-07T22:53:32.3429382Z ### REQ-MSG-1
2026-06-07T22:53:32.3429810Z - Title: Local message delivery: TCP-first to a registered address, spool fallback when offline; id->address via registry (stale-clean first); reply routing (__REPLY_TO__)
2026-06-07T22:53:32.3429916Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3429949Z 
2026-06-07T22:53:32.3430039Z ### REQ-MSG-2
2026-06-07T22:53:32.3430368Z - Title: spt binary CLI surface: send/ring/ready(+--once)/list/stop/whoami, stable arg shapes + exit codes
2026-06-07T22:53:32.3430478Z - Required stages: impl, unit
2026-06-07T22:53:32.3430522Z 
2026-06-07T22:53:32.3430616Z ### REQ-MSG-3
2026-06-07T22:53:32.3430983Z - Title: Ready-agent lifecycle: register perch (info.json + listener + registry address) on ready, drain spooled backlog on startup, clean teardown
2026-06-07T22:53:32.3431093Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3431128Z 
2026-06-07T22:53:32.3431223Z ### REQ-MSG-4
2026-06-07T22:53:32.3432020Z - Title: Listener stream stdout emits EVENT envelope lines (sister-format, ADR-0001): parse the __REPLY_TO__ frame, pass pre-formed typed envelopes through verbatim (no double-wrap), compose <EVENT type="msg" from=…> otherwise, chunk oversized lines into EVENT-PART
2026-06-07T22:53:32.3432130Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3432163Z 
2026-06-07T22:53:32.3432263Z ### REQ-NODE-IDENTITY
2026-06-07T22:53:32.3432473Z - Title: Ed25519 identity primitive: keypair, detached sign/verify, stable pubkey<->hex
2026-06-07T22:53:32.3432578Z - Required stages: impl, unit
2026-06-07T22:53:32.3432611Z 
2026-06-07T22:53:32.3432711Z ### REQ-NET-1
2026-06-07T22:53:32.3432883Z - Title: WAN messaging first-class, behind default-on net feature flag
2026-06-07T22:53:32.3432988Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3433031Z 
2026-06-07T22:53:32.3433122Z ### REQ-NET-2
2026-06-07T22:53:32.3433288Z - Title: n0 relay default + self-host knob + plain-language disclosure
2026-06-07T22:53:32.3433389Z - Required stages: impl
2026-06-07T22:53:32.3433418Z 
2026-06-07T22:53:32.3433512Z ### REQ-NET-3
2026-06-07T22:53:32.3433675Z - Title: Cross-node Psyche sync over P2P replaces gh-repo-sync
2026-06-07T22:53:32.3433780Z - Required stages: impl, unit
2026-06-07T22:53:32.3433812Z 
2026-06-07T22:53:32.3433908Z ### REQ-PAIR-1
2026-06-07T22:53:32.3434014Z - Title: TOTP-seeded SPAKE2 pairing
2026-06-07T22:53:32.3434127Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3434160Z 
2026-06-07T22:53:32.3434254Z ### REQ-PAIR-2
2026-06-07T22:53:32.3434384Z - Title: Local trust store with TOFU + warn-on-change
2026-06-07T22:53:32.3434496Z - Required stages: impl, unit
2026-06-07T22:53:32.3434525Z 
2026-06-07T22:53:32.3434619Z ### REQ-PAIR-3
2026-06-07T22:53:32.3434759Z - Title: Fetch current pairing code from any paired node
2026-06-07T22:53:32.3434968Z - Required stages: impl, unit
2026-06-07T22:53:32.3435007Z 
2026-06-07T22:53:32.3435097Z ### REQ-PAIR-4
2026-06-07T22:53:32.3435211Z - Title: Subnet naming on first pairing
2026-06-07T22:53:32.3435312Z - Required stages: impl, unit
2026-06-07T22:53:32.3435345Z 
2026-06-07T22:53:32.3435440Z ### REQ-PAIR-5
2026-06-07T22:53:32.3435726Z - Title: Multi-subnet pairing: subnet-name discovery input, create-new-names-up-front, rendezvous-token hashing
2026-06-07T22:53:32.3435836Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3435869Z 
2026-06-07T22:53:32.3435966Z ### REQ-PAIR-6
2026-06-07T22:53:32.3436212Z - Title: Elevation-gated per-subnet code fetch (UAC/root or elevated agent; else authenticator app)
2026-06-07T22:53:32.3436318Z - Required stages: impl, unit
2026-06-07T22:53:32.3436441Z 
2026-06-07T22:53:32.3436537Z ### REQ-PAIR-7
2026-06-07T22:53:32.3436694Z - Title: Subnet icon (inline image metadata, GUI-only consumer)
2026-06-07T22:53:32.3436793Z - Required stages: 
2026-06-07T22:53:32.3436836Z 
2026-06-07T22:53:32.3436927Z ### REQ-SUBNET-1
2026-06-07T22:53:32.3437598Z - Title: spt subnet noun namespace: status view (bare + status [NAME] [--nodes]), create (QR/otpauth), show-code; spt pair deleted
2026-06-07T22:53:32.3437787Z - Required stages: impl, unit
2026-06-07T22:53:32.3437825Z 
2026-06-07T22:53:32.3437950Z ### REQ-SUBNET-2
2026-06-07T22:53:32.3438250Z - Title: Guided join e2e: spt subnet join CLI initiator + always-on daemon pairing responder
2026-06-07T22:53:32.3438383Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3438421Z 
2026-06-07T22:53:32.3438542Z ### REQ-SUBNET-3
2026-06-07T22:53:32.3438866Z - Title: Node labels: hostname-default, gossiped, addressable in @node qualifiers (refuse-on-ambiguity)
2026-06-07T22:53:32.3439003Z - Required stages: impl, unit
2026-06-07T22:53:32.3439060Z 
2026-06-07T22:53:32.3439176Z ### REQ-SUBNET-4
2026-06-07T22:53:32.3439524Z - Title: Subnet membership mutations elevation-gated (create = seed reveal; join = trust-boundary enrollment)
2026-06-07T22:53:32.3439660Z - Required stages: impl, unit
2026-06-07T22:53:32.3439693Z 
2026-06-07T22:53:32.3439803Z ### REQ-DOCS-6
2026-06-07T22:53:32.3440199Z - Title: spt how-to <topic>: in-binary task-oriented agent instructions (anti-drift; quickstart prompts point agents at it)
2026-06-07T22:53:32.3440337Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3440371Z 
2026-06-07T22:53:32.3440519Z ### REQ-SEC-1
2026-06-07T22:53:32.3440985Z - Title: Per-endpoint access whitelist: origin-node gate, stateful-firewall (reply/outbound exempt), node-now/user-later, outer gate before grants
2026-06-07T22:53:32.3441111Z - Required stages: impl, unit
2026-06-07T22:53:32.3441158Z 
2026-06-07T22:53:32.3441267Z ### REQ-NOTIF-1
2026-06-07T22:53:32.3441716Z - Title: Notification primitive: per-subnet replicated spool, seen/dismissed, resurface-at-boundary, subsumes update+consent prompts
2026-06-07T22:53:32.3441863Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3441901Z 
2026-06-07T22:53:32.3442017Z ### REQ-NOTIF-2
2026-06-07T22:53:32.3442334Z - Title: spt notify (agent-issued subnet notif) + notif_command manifest seam (harness + shell adapters)
2026-06-07T22:53:32.3442476Z - Required stages: doc, impl, unit, int
2026-06-07T22:53:32.3442513Z 
2026-06-07T22:53:32.3442622Z ### REQ-UPD-1
2026-06-07T22:53:32.3442757Z - Title: Peer-propagated update over P2P
2026-06-07T22:53:32.3442885Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3442923Z 
2026-06-07T22:53:32.3443025Z ### REQ-UPD-2
2026-06-07T22:53:32.3443199Z - Title: All binaries signature-verified before handoff
2026-06-07T22:53:32.3443325Z - Required stages: impl, unit
2026-06-07T22:53:32.3443363Z 
2026-06-07T22:53:32.3443467Z ### REQ-UPD-3
2026-06-07T22:53:32.3443673Z - Title: No endpoint process terminates/suspends during self-update
2026-06-07T22:53:32.3443800Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3443838Z 
2026-06-07T22:53:32.3443949Z ### REQ-UPD-4
2026-06-07T22:53:32.3444158Z - Title: Update gated on user confirmation by default; opt-in full-auto
2026-06-07T22:53:32.3444482Z - Required stages: impl, unit
2026-06-07T22:53:32.3444521Z 
2026-06-07T22:53:32.3444627Z ### REQ-UPD-5
2026-06-07T22:53:32.3444782Z - Title: spt-core ripple-updates registered adapters
2026-06-07T22:53:32.3444906Z - Required stages: impl, unit
2026-06-07T22:53:32.3444944Z 
2026-06-07T22:53:32.3445056Z ### REQ-UPD-6
2026-06-07T22:53:32.3446019Z - Title: Platform-targeted update sets and debug rollout: signed multi-platform update metadata, recipient platform selection, channel-scoped monotonic counters, debug-channel opt-in via release-key overlay, local staging plus pull-based peer propagation, and maintainer-only convergence tooling (ADR-0016)
2026-06-07T22:53:32.3446153Z - Required stages: doc, impl, unit, int
2026-06-07T22:53:32.3446192Z 
2026-06-07T22:53:32.3446420Z ### REQ-TERM-1
2026-06-07T22:53:32.3446625Z - Title: Process-supervisor terminal wrapper hosting broker PTYs
2026-06-07T22:53:32.3446749Z - Required stages: impl, unit
2026-06-07T22:53:32.3446797Z 
2026-06-07T22:53:32.3446902Z ### REQ-TERM-2
2026-06-07T22:53:32.3447189Z - Title: session-surface abstraction; send-keys + send-line injection
2026-06-07T22:53:32.3447320Z - Required stages: impl, unit
2026-06-07T22:53:32.3447353Z 
2026-06-07T22:53:32.3447463Z ### REQ-TERM-3
2026-06-07T22:53:32.3447623Z - Title: Byte-stream remote terminal streaming for v1
2026-06-07T22:53:32.3447747Z - Required stages: impl, unit
2026-06-07T22:53:32.3447785Z 
2026-06-07T22:53:32.3447896Z ### REQ-TERM-4
2026-06-07T22:53:32.3448305Z - Title: Live activity buffer (PTY digest): adapter-supplied patterns over broker PTY, spt digest pull + delta-stream, opt-in Path-B log
2026-06-07T22:53:32.3448434Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3448467Z 
2026-06-07T22:53:32.3448577Z ### REQ-FRONT-1
2026-06-07T22:53:32.3448782Z - Title: Day-one launcher/manager frontend (list/launch/attach/init)
2026-06-07T22:53:32.3448901Z - Required stages: 
2026-06-07T22:53:32.3448934Z 
2026-06-07T22:53:32.3449044Z ### REQ-INSTALL-1
2026-06-07T22:53:32.3449277Z - Title: Two install paths; signed one-line script; OS-service registration
2026-06-07T22:53:32.3449403Z - Required stages: doc, impl, int
2026-06-07T22:53:32.3449440Z 
2026-06-07T22:53:32.3449548Z ### REQ-INSTALL-2
2026-06-07T22:53:32.3449713Z - Title: Marketplace-repackaging-friendly install
2026-06-07T22:53:32.3449825Z - Required stages: doc
2026-06-07T22:53:32.3449863Z 
2026-06-07T22:53:32.3449974Z ### REQ-INSTALL-3
2026-06-07T22:53:32.3450127Z - Title: Idempotent + interactive-optional first run
2026-06-07T22:53:32.3450258Z - Required stages: impl, int
2026-06-07T22:53:32.3450296Z 
2026-06-07T22:53:32.3450412Z ### REQ-INSTALL-4
2026-06-07T22:53:32.3451093Z - Title: Adapter registration lifecycle: spt adapter add (--github, manifest-first, install-is-first-update) + soft-deregister remove + optional manifest uninstall template; node-local registered-adapter set self-update ripples over
2026-06-07T22:53:32.3451207Z - Required stages: impl, unit
2026-06-07T22:53:32.3451240Z 
2026-06-07T22:53:32.3451337Z ### REQ-MIGRATE-1
2026-06-07T22:53:32.3451494Z - Title: Auto-detect and migrate a legacy claude_skill_owl install
2026-06-07T22:53:32.3451589Z - Required stages: 
2026-06-07T22:53:32.3451623Z 
2026-06-07T22:53:32.3451709Z ### REQ-INFRA-1
2026-06-07T22:53:32.3451880Z - Title: GitHub issue tracking for v1; tangled.org as migration target
2026-06-07T22:53:32.3451971Z - Required stages: 
2026-06-07T22:53:32.3452009Z 
2026-06-07T22:53:32.3452098Z ### REQ-INSTALL-5
2026-06-07T22:53:32.3452543Z - Title: Non-interactive install path: the canonical one-liner doubles as every adapter's pack-in on-demand install (no second mechanism); sha256-verified fetch; user-PATH registration
2026-06-07T22:53:32.3452649Z - Required stages: impl, int
2026-06-07T22:53:32.3452682Z 
2026-06-07T22:53:32.3452780Z ### REQ-REL-1
2026-06-07T22:53:32.3453140Z - Title: spt-releases publish-target repo: README public face, licensing split, Pages docs at the permanent lapse-proof canonical URL (ADR-0014)
2026-06-07T22:53:32.3453351Z - Required stages: doc, impl
2026-06-07T22:53:32.3453384Z 
2026-06-07T22:53:32.3453473Z ### REQ-REL-2
2026-06-07T22:53:32.3453923Z - Title: Release asset set consumable by the self-updater: platform binaries, SHA256SUMS, SignedRelease metadata, manifest schema, mock-adapter zip; tag-triggered cross-repo pipeline
2026-06-07T22:53:32.3454032Z - Required stages: impl, int
2026-06-07T22:53:32.3454064Z 
2026-06-07T22:53:32.3454161Z ### REQ-REL-3
2026-06-07T22:53:32.3454576Z - Title: Two-key release-signing trust anchor: primary + offline never-used recovery, both pubkeys embedded in the binary's trusted set, manual local signing (ADR-0015)
2026-06-07T22:53:32.3454685Z - Required stages: impl, unit
2026-06-07T22:53:32.3454713Z 
2026-06-07T22:53:32.3454805Z ### REQ-DOCS-1
2026-06-07T22:53:32.3455095Z - Title: Dual-audience docs (human + AI dev-agent), markdown once / two depths
2026-06-07T22:53:32.3455197Z - Required stages: doc, impl
2026-06-07T22:53:32.3455229Z 
2026-06-07T22:53:32.3455318Z ### REQ-DOCS-2
2026-06-07T22:53:32.3455480Z - Title: Sub-10-minute runnable killer quickstart per audience
2026-06-07T22:53:32.3455584Z - Required stages: doc, int
2026-06-07T22:53:32.3455616Z 
2026-06-07T22:53:32.3455716Z ### REQ-DOCS-3
2026-06-07T22:53:32.3455954Z - Title: Diátaxis structure; one canonical way to do X
2026-06-07T22:53:32.3456054Z - Required stages: doc
2026-06-07T22:53:32.3456084Z 
2026-06-07T22:53:32.3456184Z ### REQ-DOCS-4
2026-06-07T22:53:32.3456369Z - Title: Agent-consumable layer (llms.txt, manifest schema, MCP, CLI help)
2026-06-07T22:53:32.3456480Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3456513Z 
2026-06-07T22:53:32.3456607Z ### REQ-DOCS-5
2026-06-07T22:53:32.3456795Z - Title: Anti-drift: rustdoc/schema/exports/CLI-help generated + CI-checked
2026-06-07T22:53:32.3456908Z - Required stages: impl, int
2026-06-07T22:53:32.3456942Z 
2026-06-07T22:53:32.3457101Z ### REQ-HAZARD-GRACE-BEFORE-SIGNOFF
2026-06-07T22:53:32.3457290Z - Title: Grace-period wait completes before composing INIT_SIGNOFF (1.1)
2026-06-07T22:53:32.3457401Z - Required stages: impl, unit
2026-06-07T22:53:32.3457439Z 
2026-06-07T22:53:32.3457542Z ### REQ-HAZARD-INFO-JSON-TORN-READ
2026-06-07T22:53:32.3457686Z - Title: State-file reads tolerate concurrent writes (1.2)
2026-06-07T22:53:32.3457786Z - Required stages: impl, unit
2026-06-07T22:53:32.3457819Z 
2026-06-07T22:53:32.3457927Z ### REQ-HAZARD-STALE-INDEX-LOCK
2026-06-07T22:53:32.3458052Z - Title: Sweep stale lockfiles on daemon boot (1.3)
2026-06-07T22:53:32.3458159Z - Required stages: impl, unit
2026-06-07T22:53:32.3458193Z 
2026-06-07T22:53:32.3458302Z ### REQ-HAZARD-DEFERRED-DRAIN
2026-06-07T22:53:32.3458474Z - Title: Deferred spool rows excluded from the event-stream drain (1.4)
2026-06-07T22:53:32.3458578Z - Required stages: impl, unit
2026-06-07T22:53:32.3458616Z 
2026-06-07T22:53:32.3458718Z ### REQ-HAZARD-WORKER-PATH
2026-06-07T22:53:32.3458893Z - Title: Single source of truth for Worker/Psyche perch location (1.5)
2026-06-07T22:53:32.3458994Z - Required stages: impl, unit
2026-06-07T22:53:32.3459027Z 
2026-06-07T22:53:32.3459142Z ### REQ-HAZARD-PARENT-PID-PREFER
2026-06-07T22:53:32.3459314Z - Title: Prefer stable parent PID / broker handle over ephemeral PID (2.1)
2026-06-07T22:53:32.3459408Z - Required stages: 
2026-06-07T22:53:32.3459437Z 
2026-06-07T22:53:32.3459551Z ### REQ-HAZARD-STDIN-SESSION-ID
2026-06-07T22:53:32.3459676Z - Title: Stdin session_id precedence over env (2.2)
2026-06-07T22:53:32.3459775Z - Required stages: 
2026-06-07T22:53:32.3459804Z 
2026-06-07T22:53:32.3459914Z ### REQ-HAZARD-HANDOFF-ARGV-COMPAT
2026-06-07T22:53:32.3460066Z - Title: Broker/brain IPC + handoff argv version-tolerant (2.3)
2026-06-07T22:53:32.3460171Z - Required stages: impl, unit
2026-06-07T22:53:32.3460204Z 
2026-06-07T22:53:32.3460315Z ### REQ-HAZARD-GEN-START-NOW
2026-06-07T22:53:32.3460452Z - Title: gen_start = now() on cold-start and handoff (2.4)
2026-06-07T22:53:32.3460558Z - Required stages: impl, int
2026-06-07T22:53:32.3460587Z 
2026-06-07T22:53:32.3460799Z ### REQ-HAZARD-EPHEMERAL-CLEANUP
2026-06-07T22:53:32.3460953Z - Title: Ephemeral perch cleanup on every ring exit path (3.1)
2026-06-07T22:53:32.3461053Z - Required stages: impl, unit
2026-06-07T22:53:32.3461086Z 
2026-06-07T22:53:32.3461195Z ### REQ-HAZARD-STALE-SIGNOFF-SENTINEL
2026-06-07T22:53:32.3461354Z - Title: Stale signoff sentinel does not kill a fresh start (3.2)
2026-06-07T22:53:32.3461452Z - Required stages: impl, unit
2026-06-07T22:53:32.3461486Z 
2026-06-07T22:53:32.3461596Z ### REQ-HAZARD-ECHO-BEFORE-SIGNOFF
2026-06-07T22:53:32.3461791Z - Title: Echo-commune fires before INIT_SIGNOFF on orphan teardown (3.3)
2026-06-07T22:53:32.3461887Z - Required stages: impl, unit
2026-06-07T22:53:32.3461921Z 
2026-06-07T22:53:32.3462035Z ### REQ-HAZARD-ENVELOPE-DECODE-ORDER
2026-06-07T22:53:32.3462278Z - Title: Envelope decode order, ampersand decoded last (4.1)
2026-06-07T22:53:32.3462383Z - Required stages: impl, unit
2026-06-07T22:53:32.3462416Z 
2026-06-07T22:53:32.3462527Z ### REQ-HAZARD-ENVELOPE-PARSER-SAFE
2026-06-07T22:53:32.3462702Z - Title: Two-slice envelope parser is panic-free and tolerant (4.2)
2026-06-07T22:53:32.3462808Z - Required stages: impl, unit
2026-06-07T22:53:32.3462842Z 
2026-06-07T22:53:32.3462946Z ### REQ-HAZARD-EVENTPART-REASSEMBLY
2026-06-07T22:53:32.3463147Z - Title: EVENT-PART split/reassembly is byte-exact; orphan parts dropped silently
2026-06-07T22:53:32.3463247Z - Required stages: impl, unit
2026-06-07T22:53:32.3463283Z 
2026-06-07T22:53:32.3463383Z ### REQ-HAZARD-ID-CHARSET
2026-06-07T22:53:32.3463620Z - Title: Addressable-id charset reserves :/@ delimiters; validated at every creation seam (4.6)
2026-06-07T22:53:32.3463719Z - Required stages: impl, unit
2026-06-07T22:53:32.3463752Z 
2026-06-07T22:53:32.3463868Z ### REQ-HAZARD-REGISTRY-STALE-CLEAN
2026-06-07T22:53:32.3464053Z - Title: Stale registry entries degrade to fallback, never hard-fail (4.3)
2026-06-07T22:53:32.3464159Z - Required stages: impl, unit
2026-06-07T22:53:32.3464192Z 
2026-06-07T22:53:32.3464301Z ### REQ-HAZARD-REGISTRY-CONCURRENT
2026-06-07T22:53:32.3464535Z - Title: Concurrent SQLite openers (registry/spool) must not fail with 'database is locked' (4.7)
2026-06-07T22:53:32.3464644Z - Required stages: impl, unit
2026-06-07T22:53:32.3464673Z 
2026-06-07T22:53:32.3464779Z ### REQ-HAZARD-REGISTRY-DIR-CREATE
2026-06-07T22:53:32.3465146Z - Title: SQLite store opens create their parent dir themselves — a fresh-home registry op must not SQLITE_CANTOPEN (4.9)
2026-06-07T22:53:32.3465255Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3465288Z 
2026-06-07T22:53:32.3465394Z ### REQ-HAZARD-REGISTRY-EPOCH-LEASE
2026-06-07T22:53:32.3465822Z - Title: Registry merge ordered by per-node monotonic epoch, never wall-clock — a stale Active can't clobber a newer Offline (4.8, red-team #8)
2026-06-07T22:53:32.3465940Z - Required stages: impl, unit
2026-06-07T22:53:32.3465973Z 
2026-06-07T22:53:32.3466083Z ### REQ-HAZARD-DEFERRED-SURVIVE-DRAIN
2026-06-07T22:53:32.3466210Z - Title: Deferred rows survive poll drain (4.4)
2026-06-07T22:53:32.3466314Z - Required stages: impl, unit
2026-06-07T22:53:32.3466343Z 
2026-06-07T22:53:32.3466453Z ### REQ-HAZARD-INBOX-NO-DOUBLE
2026-06-07T22:53:32.3466577Z - Title: No double-delivery via legacy inbox (4.5)
2026-06-07T22:53:32.3466687Z - Required stages: impl, unit
2026-06-07T22:53:32.3466716Z 
2026-06-07T22:53:32.3466830Z ### REQ-HAZARD-WINDOWS-PID-RECYCLE
2026-06-07T22:53:32.3467050Z - Title: Windows PID-recycling false positives guarded (5.1)
2026-06-07T22:53:32.3467201Z - Required stages: impl, unit
2026-06-07T22:53:32.3467235Z 
2026-06-07T22:53:32.3467360Z ### REQ-HAZARD-EBUSY-RENAME
2026-06-07T22:53:32.3467535Z - Title: tmp-write + atomic-rename + retry on Windows EBUSY (5.2)
2026-06-07T22:53:32.3467641Z - Required stages: impl, unit
2026-06-07T22:53:32.3467675Z 
2026-06-07T22:53:32.3467788Z ### REQ-HAZARD-SUBPROCESS-TIMEOUT
2026-06-07T22:53:32.3467932Z - Title: Every harness/git subprocess has a timeout (5.3)
2026-06-07T22:53:32.3468036Z - Required stages: impl, unit
2026-06-07T22:53:32.3468179Z 
2026-06-07T22:53:32.3468295Z ### REQ-HAZARD-UNC-PATH-STRIP
2026-06-07T22:53:32.3468450Z - Title: Strip Windows UNC prefix on serialized paths (5.4)
2026-06-07T22:53:32.3468549Z - Required stages: impl, unit
2026-06-07T22:53:32.3468578Z 
2026-06-07T22:53:32.3468696Z ### REQ-HAZARD-SINGLE-PATH-SOURCE
2026-06-07T22:53:32.3468876Z - Title: Single path/registry source of truth; no layout ambiguity (6.1)
2026-06-07T22:53:32.3468987Z - Required stages: impl, unit
2026-06-07T22:53:32.3469020Z 
2026-06-07T22:53:32.3469129Z ### REQ-HAZARD-SOFT-CLEANUP
2026-06-07T22:53:32.3469306Z - Title: Soft-cleanup preserves state, removes only the ready marker (6.2)
2026-06-07T22:53:32.3469410Z - Required stages: impl, unit
2026-06-07T22:53:32.3469443Z 
2026-06-07T22:53:32.3469554Z ### REQ-HAZARD-CASCADE-WIPE-GUARD
2026-06-07T22:53:32.3469854Z - Title: No hard-delete of a parent hosting non-empty children (6.3)
2026-06-07T22:53:32.3469959Z - Required stages: impl, unit
2026-06-07T22:53:32.3469992Z 
2026-06-07T22:53:32.3470111Z ### REQ-HAZARD-DROP-FILE-SINGLE-WRITER
2026-06-07T22:53:32.3470255Z - Title: Drop files are daemon-owned single-writer (6.4)
2026-06-07T22:53:32.3470354Z - Required stages: impl, unit
2026-06-07T22:53:32.3470388Z 
2026-06-07T22:53:32.3470503Z ### REQ-HAZARD-DIRECT-WRITE-PRECEDENCE
2026-06-07T22:53:32.3470703Z - Title: Direct-write precedence marker (with node id) guards stale overwrite (6.5)
2026-06-07T22:53:32.3470804Z - Required stages: impl, unit
2026-06-07T22:53:32.3470833Z 
2026-06-07T22:53:32.3470955Z ### REQ-HAZARD-CONFLICT-BOTH-PRESERVED
2026-06-07T22:53:32.3471484Z - Title: A surfaced concurrent context pair is durably preserved (both versions, tracked artifacts) until a strictly dominating write clears it; no reconcile failure path discards an unmerged version (6.6, ADR-0013)
2026-06-07T22:53:32.3471599Z - Required stages: impl, unit
2026-06-07T22:53:32.3471627Z 
2026-06-07T22:53:32.3471741Z ### REQ-HAZARD-DETACHED-PIPE-INHERIT
2026-06-07T22:53:32.3472848Z - Title: Windows detached long-lived children must not inherit a captured caller's pipe: every detach-spawn of an immortal child (daemon, shell binary) runs bInheritHandles=FALSE, or a caller capturing output anywhere up the process chain hangs forever on a pipe that never EOFs — std-handle flag stripping is NOT sufficient (grandparent strays still flow) (5.6)
2026-06-07T22:53:32.3472962Z - Required stages: impl, unit
2026-06-07T22:53:32.3472990Z 
2026-06-07T22:53:32.3473096Z ### REQ-HAZARD-CONPTY-DSR
2026-06-07T22:53:32.3473300Z - Title: ConPTY reader must auto-answer DSR (ESC[6n) or all child output stalls (5.5)
2026-06-07T22:53:32.3473402Z - Required stages: impl, unit
2026-06-07T22:53:32.3473435Z 
2026-06-07T22:53:32.3473539Z ### REQ-HAZARD-CHILD-CONSOLE-FLASH
2026-06-07T22:53:32.3473938Z - Title: Console-subsystem children of the console-less daemon spawn with CREATE_NO_WINDOW, or each spawn flashes a visible blank window on the user's desktop (5.8)
2026-06-07T22:53:32.3474053Z - Required stages: impl, unit
2026-06-07T22:53:32.3474086Z 
2026-06-07T22:53:32.3474199Z ### REQ-HAZARD-INSTANT-UNDERFLOW
2026-06-07T22:53:32.3474747Z - Title: Scheduling never subtracts a Duration from Instant::now() (underflow-panics on a host booted more recently than the offset); 'due now / never run' is Option<Instant>=None gated on forward duration_since only (5.9)
2026-06-07T22:53:32.3474856Z - Required stages: impl, unit
2026-06-07T22:53:32.3474889Z 
2026-06-07T22:53:32.3474995Z ### REQ-HAZARD-SUDO-SECURE-PATH
2026-06-07T22:53:32.3475824Z - Title: Elevation guidance on Unix names the binary's ABSOLUTE path under sudo (a user-local install ~/.local/bin · ~/.cargo/bin is not on sudo's secure_path, so bare `sudo spt` dies 'command not found'); gated commands auto-elevate on an interactive TTY, else print the runnable hint (5.10)
2026-06-07T22:53:32.3475935Z - Required stages: impl, unit
2026-06-07T22:53:32.3475963Z 
2026-06-07T22:53:32.3476067Z ### REQ-HAZARD-LOCAL-API-AUTH
2026-06-07T22:53:32.3476269Z - Title: Every local `api` mutation authenticated to an endpoint/session (codex #13)
2026-06-07T22:53:32.3476443Z - Required stages: impl, unit
2026-06-07T22:53:32.3476477Z 
2026-06-07T22:53:32.3476586Z ### REQ-HAZARD-RESTART-IDEMPOTENT
2026-06-07T22:53:32.3476836Z - Title: Idempotent/exactly-once delivery across brain restart at every broker boundary (codex #14)
2026-06-07T22:53:32.3476942Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3477047Z 
2026-06-07T22:53:32.3477155Z ### REQ-HAZARD-UPDATE-ROLLBACK
2026-06-07T22:53:32.3477399Z - Title: Self-update rejects version rollback; metadata expiry + adapter content signing (codex #5)
2026-06-07T22:53:32.3477509Z - Required stages: impl, unit
2026-06-07T22:53:32.3477538Z 
2026-06-07T22:53:32.3477647Z ### REQ-HAZARD-DAEMON-HOSTED-LIVENESS
2026-06-07T22:53:32.3478048Z - Title: Daemon-hosted perches (Psyche, spt-hosted Self) derive liveness from the daemon endpoint table + info.json status, never is_process_alive(info.pid) (2.5)
2026-06-07T22:53:32.3478258Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3478296Z 
2026-06-07T22:53:32.3478405Z ### REQ-HAZARD-PSYCHE-OUTBOUND-PROXY
2026-06-07T22:53:32.3479370Z - Title: Psyche outbound captured + sanitized: the live-Psyche turn driver captures stdout (never Stdio::null), and the daemon strips/re-stamps Psyche-supplied from=/target and constrains routing (reply→__REPLY_TO__ sender, notify→own user/subnet) (7.3)
2026-06-07T22:53:32.3479484Z - Required stages: impl, unit
2026-06-07T22:53:32.3479523Z 
2026-06-07T22:53:32.3479636Z ### REQ-HAZARD-DAEMON-SCHED-NONBLOCKING
2026-06-07T22:53:32.3480510Z - Title: Per-agent pulse/psyche/echo-commune scheduling must not serialize across agents: each agent's bounded LLM call (echo-commune summarizer, Psyche turn) runs off the shared scheduler so one slow/hung call cannot stall another agent's tick (7.4)
2026-06-07T22:53:32.3480628Z - Required stages: impl, unit
2026-06-07T22:53:32.3480662Z 
2026-06-07T22:53:32.3480773Z ### REQ-HAZARD-PAIR-TRANSCRIPT-BIND
2026-06-07T22:53:32.3481445Z - Title: Pairing transcript binds roles, both node pubkeys, subnet ID, seed epoch, TOTP time-step, and confirmation MACs — or unknown-key-share/reflection/wrong-subnet/replay pairing remain possible (ADR-0005 #12)
2026-06-07T22:53:32.3481558Z - Required stages: impl, unit
2026-06-07T22:53:32.3481586Z 
2026-06-07T22:53:32.3481698Z ### REQ-HAZARD-PAIR-SEED-ROTATION
2026-06-07T22:53:32.3482201Z - Title: Removing a node rotates the subnet seed (epoch bump) so an old node/old seed cannot rejoin; trust-store delete alone is NOT revocation because the seed is replicated to every trusted node (ADR-0005 #10)
2026-06-07T22:53:32.3482311Z - Required stages: impl, unit
2026-06-07T22:53:32.3482344Z 
2026-06-07T22:53:32.3482450Z ### REQ-HAZARD-PAIR-RATE-LIMIT
2026-06-07T22:53:32.3483284Z - Title: Subnet-global pairing rate limit: one active ceremony per subnet, shared attempt counter, exponential backoff — a public pre-trust relay + multiple seed-holders otherwise enables distributed SPAKE2 guessing (and ±1 TOTP window triples the valid-password space) (ADR-0005 #11)
2026-06-07T22:53:32.3483403Z - Required stages: impl, unit
2026-06-07T22:53:32.3483436Z 
2026-06-07T22:53:32.3483541Z ### REQ-HAZARD-WAN-ORIGIN-AUTH
2026-06-07T22:53:32.3484394Z - Title: WAN-inbound origin is transport truth, never payload: the access gate's subject (ADR-0009 origin-node whitelist) is the QUIC handshake-proven remote node id from the broker's conn/stream table — a forged origin/node field inside record bytes is inert (7.5)
2026-06-07T22:53:32.3484508Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3484541Z 
2026-06-07T22:53:32.3484632Z ### REQ-CONSENT-1
2026-06-07T22:53:32.3485488Z - Title: Consent grant store: capability x subject-agent x target-node rows, enforced at the target node, subnet-settable (replicates as security material near the trust store), revocable; gated-capability ids (remote-exec, instantiate-anywhere) reserved-but-refusing; v1 consumers are the shell spawn gates (CONTEXT Consent & security gates)
2026-06-07T22:53:32.3485603Z - Required stages: impl, unit
2026-06-07T22:53:32.3485764Z 
2026-06-07T22:53:32.3485856Z ### REQ-CONSENT-2
2026-06-07T22:53:32.3486642Z - Title: Interactive consent escalation: an ungated high-risk action routes a consent prompt to the user's most-recently-active session; allow-once / allow-always (writes a grant) / deny; pre-consent flags (can_shutdown, shell_wake_spawn_anywhere) author grants via manifest/settings (CONTEXT Consent & security gates)
2026-06-07T22:53:32.3486751Z - Required stages: impl, unit
2026-06-07T22:53:32.3486781Z 
2026-06-07T22:53:32.3486872Z ### REQ-PRES-1
2026-06-07T22:53:32.3488369Z - Title: Presence resolution: the presence datum (last_active_node, last_active_endpoint, ts) gossiped subnet-wide via the agent-interaction heartbeat (rides registry distribution, visibility-gated) + one first-class most-recently-active resolution API consumed by notif first-fire, update-consent delivery, consent escalation, and shell wake resolution (M5 scope decision 1: resolution only — the PresenceChannel endpoint stays deferred)
2026-06-07T22:53:32.3495239Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3495290Z 
2026-06-07T22:53:32.3495413Z ### REQ-SHELL-1
2026-06-07T22:53:32.3496301Z - Title: Shell hosting machinery: shell perch under the owner (type/owner/adapter_name/status/alias), broker-launched binary + api bind local-link handshake, the three channels (command durable, text+file durable + progress-queryable, sensory REST-only never spooled + dropped-unless-owner-live), owner exclusivity (CONTEXT Shell model)
2026-06-07T22:53:32.3496411Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3496450Z 
2026-06-07T22:53:32.3496544Z ### REQ-SHELL-2
2026-06-07T22:53:32.3498629Z - Title: Shell sleep/wake: link-break always closes the binary (pre-close instruction + termination timeout), ephemeral teardown vs persistent offline/relink, wake_command wake-watcher (offline-only, exit-opcode supervision, exponential backoff + give-up), state-keyed wake resolution (dormant/suspended/active-elsewhere; no-reachable refuses — spawn-anywhere branch deferred), spt shutdown owner cascade + api owner-shutdown gated by can_shutdown (CONTEXT Shell sleep/wake)
2026-06-07T22:53:32.3498848Z - Required stages: impl, unit, int
2026-06-07T22:53:32.3498891Z 
2026-06-07T22:53:32.3499030Z ### REQ-HAZARD-ELEVATED-DAEMON-SPAWN
2026-06-07T22:53:32.3500682Z - Title: The daemon always runs unelevated in the invoking user's universe, regardless of which command spawns it: an elevated spawner de-elevates (Windows: UAC linked token via CreateProcessWithTokenW; Linux: drop to SUDO_UID/SUDO_GID + the invoker's HOME) — an elevated daemon's pipes deny unelevated clients (every later spt reads not-running→spawn→bind Access-denied) and a sudo'd daemon roots the user's state universe (5.7)
2026-06-07T22:53:32.3500819Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3500905Z 
2026-06-07T22:53:32.3501035Z ### REQ-HAZARD-REGISTRY-GHOST-ROWS
2026-06-07T22:53:32.3502622Z - Title: A dead node identity's registry rows must decay: only the per-(endpoint,node) epoch lease supersedes rows, so without eviction a vanished node's rows are immortal and poison bare-id resolution with phantom AcrossNodes ambiguity — evict rows whose author node has not been heard (admitted inbound feed) within the eviction window; own rows never decay; a revived node re-inserts from its durable epoch within one pump cadence (4.10)
2026-06-07T22:53:32.3502760Z - Required stages: doc, impl, unit
2026-06-07T22:53:32.3502794Z 
2026-06-07T22:53:32.3502937Z ### REQ-CLI-1
2026-06-07T22:53:32.3504189Z - Title: spt endpoint noun namespace: absorbs fork/suspend/wake/shutdown/rename/stop/digest + access (ported 1:1: allow|revoke|open|list, decision 21) + description (ex-resources blurb; bare=show, set=author); merged endpoint list [--local|--subnet <name>] grouped by subnet with SELF pinned, --detail adding the ex-resources yellow-pages blurb projection; bare spt endpoint = the list (M8 decisions 1-2, 25)
2026-06-07T22:53:32.3504332Z - Required stages: impl, unit
2026-06-07T22:53:32.3504365Z 
2026-06-07T22:53:32.3504685Z ### REQ-CLI-2
2026-06-07T22:53:32.3505523Z - Title: spt daemon noun: run|stop|status (hidden daemon verb becomes daemon run; agent-endpoint shutdown keeps its name under endpoint); daemon status renders the pump heartbeat (last-tick recency) so a half-dead daemon is never rendered implied-healthy (M8 decisions 5, 23)
2026-06-07T22:53:32.3505652Z - Required stages: impl, unit
2026-06-07T22:53:32.3505685Z 
2026-06-07T22:53:32.3505808Z ### REQ-CLI-3
2026-06-07T22:53:32.3506656Z - Title: Agent hot path stays flat across the M8 reorg: send/ring/ready/whoami/how-to unchanged; notify moves to subnet notify while notif stays top-level; breaking renames land clean with no deprecation shims (zero external CLI consumers pre-spt-claude-code) (M8 decisions 3-4, 9)
2026-06-07T22:53:32.3506785Z - Required stages: impl, unit
2026-06-07T22:53:32.3506942Z 
2026-06-07T22:53:32.3507147Z ### REQ-SUBNET-5
2026-06-07T22:53:32.3508536Z - Title: Per-subnet serve-state: spt subnet detach <NAME> [--save] / attach <NAME> [--save] — daemon keeps running, stops/starts advertising + connecting for that subnet (peer pump + responder selective); --save persists the startup default in daemon config; the all-attached banner gains per-subnet states (M8 decision 6, --save renamed from --auto per decision 25 session)
2026-06-07T22:53:32.3508671Z - Required stages: impl, unit
2026-06-07T22:53:32.3508708Z 
2026-06-07T22:53:32.3508817Z ### REQ-SUBNET-6
2026-06-07T22:53:32.3509633Z - Title: Trust lifecycle verbs, elevation-gated: spt subnet leave <NAME> (membership exit) and spt subnet prune <node> (removes a dead identity's trust + registry rows, killing its dead dials; trust mutation = security surface, REQ-PAIR-6 gate machinery) (M8 decisions 6-7)
2026-06-07T22:53:32.3509752Z - Required stages: impl, unit
2026-06-07T22:53:32.3509799Z 
2026-06-07T22:53:32.3509910Z ### REQ-SUBNET-7
2026-06-07T22:53:32.3511824Z - Title: Per-machine re-pair trust overwrite: registry rows carry a hashed stable machine identifier (OS machine id /etc/machine-id|MachineGuid, domain-separated SHA-256 before gossip, spt-minted persisted UUID fallback; additive serde-default field — old rows parse clean); a COMPLETED pairing ceremony presenting the same node label AND machine id as an existing trusted row evicts the superseded identity's trust + registry rows on the seed-holder and replicates the eviction; a gossiped claim alone never evicts trust (M8 decisions 13, 22)
2026-06-07T22:53:32.3511938Z - Required stages: impl, unit
2026-06-07T22:53:32.3511971Z 
2026-06-07T22:53:32.3512066Z ### REQ-SUBNET-8
2026-06-07T22:53:32.3513173Z - Title: Status render honesty: zero-subnet text is daemon-aware ('No subnets registered — this node is standalone.' + daemon-running-dependent blurb, never implying messaging works while the daemon is down); hint footer prints on bare spt subnet only (status drops it); a stalled pump is surfaced in subnet status, never rendered implied-healthy (M8 decisions 11-12, 23)
2026-06-07T22:53:32.3513291Z - Required stages: impl, unit
2026-06-07T22:53:32.3513325Z 
2026-06-07T22:53:32.3513417Z ### REQ-INSTALL-6
2026-06-07T22:53:32.3514606Z - Title: Linux elevation install leg: install.sh symlinks the binary into a sudo-reachable path (/usr/local/bin; graceful print-the-one-liner when unelevated) so sudo spt resolves; first sudo spt detects elevation and prompts ONCE for the default user account — thereafter any elevated daemon launch runs daemon + state under that account, never root (KH 5.7 interplay verified) (M8 decision 8)
2026-06-07T22:53:32.3514712Z - Required stages: impl, unit
2026-06-07T22:53:32.3514745Z 
2026-06-07T22:53:32.3514836Z ### REQ-INSTALL-7
2026-06-07T22:53:32.3515947Z - Title: Windows inbound reachability: the elevated install leg registers the inbound-UDP firewall rule (New-NetFirewallRule); the daemon self-detects blocked inbound and renders it as the no-connection state in subnet status + the coming-online banner (covers user-scope installs that skip the elevated leg — never a silent NO_SEED_HOLDER dead-end) (M8 root cause 3)
2026-06-07T22:53:32.3516169Z - Required stages: impl
2026-06-07T22:53:32.3516202Z 
2026-06-07T22:53:32.3516298Z ### REQ-INSTALL-8
2026-06-07T22:53:32.3517388Z - Title: OS-service registration (REQ-INSTALL-1's deferred third leg): Linux systemd USER service + loginctl enable-linger (linger rides the elevated install leg; daemon starts at boot pre-login, user universe per KH 5.7, systemctl --user managed); Windows scheduled task at-logon (interactive session, no stored credentials); a node is reachable after reboot without any manual spt invocation (M8 decision 17)
2026-06-07T22:53:32.3517487Z - Required stages: impl
2026-06-07T22:53:32.3517522Z 
2026-06-07T22:53:32.3517612Z ### REQ-CONV-1
2026-06-07T22:53:32.3519025Z - Title: Peer address seeding, both cold starts: durable peer-addrs.json (identity dir) maps peer pubkey → last-known dialable address; the pump's resolver consults it FIRST with id-only discovery fallback on miss or dial failure (a stale addr never strands a peer); written by the pairing ceremony (both sides, from the live connection) and by the pump on successful connect; post-join first sync and post-restart resync converge in seconds, not ~1 min (M8 decisions 14, 20)
2026-06-07T22:53:32.3519245Z - Required stages: impl, unit
2026-06-07T22:53:32.3519273Z 
2026-06-07T22:53:32.3519363Z ### REQ-CONV-2
2026-06-07T22:53:32.3520465Z - Title: Event-driven advertisement: endpoint online/offline transitions (ready-listener start/stop, rest-state transition, perch death) trigger an immediate advertise_local + peer push as a WAKE of the existing pump loop (no second advertisement path — epoch lease + visibility gates ride unchanged); the cadence stays the steady-state floor (M8 decision 15)
2026-06-07T22:53:32.3520574Z - Required stages: impl, unit
2026-06-07T22:53:32.3520603Z 
2026-06-07T22:53:32.3520703Z ### REQ-PAIR-8
2026-06-07T22:53:32.3521953Z - Title: NTP TOTP offset: the pairing ceremony queries NTP at ceremony time (both sides) and applies the derived offset to the TOTP calculation in-process only; system-clock fallback when NTP is unreachable (offline LAN pairing unaffected — NTP failure never blocks a pairing that succeeds today); never sets the OS clock; no background sync loop (M8 decision 18; field trigger: enlyzeam clock >1 min off exceeds the ±1 window)
2026-06-07T22:53:32.3522064Z - Required stages: impl, unit
2026-06-07T22:53:32.3522097Z 
2026-06-07T22:53:32.3522183Z ### REQ-DAEMON-5
2026-06-07T22:53:32.3523451Z - Title: Pump liveness: the peer pump writes a last-tick heartbeat consumed by daemon status / subnet status (decision 23 render legs in REQ-CLI-2/REQ-SUBNET-8); the daemon supervises the pump task — a panic is caught, logged loudly, and the pump restarts with capped backoff (≤5 min), so a 5.9-class death self-heals visibly instead of silently halving the daemon (M8 decision 23; field motivation: hfenduleam 2026-06-07 half-death)
2026-06-07T22:53:32.3523565Z - Required stages: impl, unit
2026-06-07T22:53:32.3523599Z 
2026-06-07T22:53:32.3523704Z ### REQ-HAZARD-EPOCH-RESET
2026-06-07T22:53:32.3525009Z - Title: Advertisement-epoch reset strands a node: peers' higher last-seen epoch drops the reset node's fresh advertisements as Stale until the counter outruns history. Common case (full reinstall/re-pair) is mitigated by REQ-SUBNET-7's ceremony eviction (peer-side epoch memory dies with the deleted row — acceptance-verified); the residual narrow slice (epoch file lost, identity kept) is documented, guard deferred to a field hit (4.11)
2026-06-07T22:53:32.3525113Z - Required stages: 
2026-06-07T22:53:32.3525147Z 
2026-06-07T22:53:32.3525244Z ## How to report back
2026-06-07T22:53:32.3525277Z 
2026-06-07T22:53:32.3525447Z For every (requirement, failing criterion) pair, emit one finding:
2026-06-07T22:53:32.3525481Z 
2026-06-07T22:53:32.3525563Z     {
2026-06-07T22:53:32.3525676Z       "code": "requirement_quality",
2026-06-07T22:53:32.3525781Z       "requirementId": "REQ-...",
2026-06-07T22:53:32.3525954Z       "criterion": "singular" | "verifiable" | "atomic" | "active-voice",
2026-06-07T22:53:32.3526063Z       "message": "<short reason>",
2026-06-07T22:53:32.3526283Z       "suggestedRevision": "<optional rewrite>"
2026-06-07T22:53:32.3526372Z     }
2026-06-07T22:53:32.3526401Z 
2026-06-07T22:53:32.3526579Z Wrap your response as { "findings": [ ... ] } listing only your concerns; the
2026-06-07T22:53:32.3526720Z deterministic findings above don't need to be repeated.
